
import vnode from './vnode'
import createElement from './createElement'
import patchVnode from './patchVnode'

export default function patch(oldVnode, newVnode) {
    // 判断 oldVnode 是一个虚拟节点，还是一个 DOM 节点？
    if (oldVnode.sel == undefined || oldVnode.sel == '') {
        // DOM 转换成虚拟节点
        oldVnode = vnode(oldVnode.tagName.toLowerCase(), {}, [], oldVnode, undefined, undefined)
    }
    // 判断 oldVnode 和 newVnode 是否为同一个虚拟节点
    if (oldVnode.sel == newVnode.sel && oldVnode.key == newVnode.key) {
        // 在同一个虚拟节点下
        patchVnode(oldVnode, newVnode)
    } else {
        // 不在同一个虚拟节点下, 暴力拆除子节点，插入新节点
        let newDOM = createElement(newVnode)
        // 插入新的节点
        oldVnode.elm.parentNode.insertBefore(newDOM, oldVnode.elm)
        // 移除 old 节点
        oldVnode.elm.parentNode.removeChild(oldVnode.elm)
    }
}
